#include "destino.h"
#include "ui_destino.h"

destino::destino(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::destino)
{
    ui->setupUi(this);
    this->llenar_lista();
}


destino::~destino()
{
    delete ui;
}

void destino::ciudad_seleccionada()
{

    /* Reemplazar funcion con una que utilize bases de datos */
    //  ---------------------------------------------------------//
    char cargar[50];
    FILE *fichero;
    struct ciudad aux, cargado;
    QString tmp;
    if(this->ui->listWidget->count()!=0)
    {
    tmp = this->ui->listWidget->currentItem()->text();

    for(int i=0; i<=50; i++)
    {
        cargar[i] = tmp.data()[i].toAscii();
    }
    fichero = fopen("ciudades.dat", "r");
    while(!feof(fichero))
    {
        fread(&aux, sizeof(struct ciudad), 1, fichero);
        if(strcmp(cargar, aux.nombre))
        {
            cargado = aux;
        }
    }
    this->cargar(cargado);
    }

}

void destino::cargar(struct ciudad load)
{
    char f = 'g';
    int prec = 6;
    //     Revisar -----------------------------------------------------------------------------------------
    if(load.lat.grados<0)
    {
        pasar_cuadrante_negativo(&load.lat);
        this->ui->comboBox->setCurrentIndex(1);
    }

    if(load.lon.grados<0)
    {
        pasar_cuadrante_negativo(&load.lon);
        this->ui->comboBox_2->setCurrentIndex(1);
    }           //    -----------------------------------------------------------------------------------------*/
    this->ui->lineEdit->setText(QString::number(load.lat.grados, f, prec));
    this->ui->lineEdit_2->setText(QString::number(load.lat.minutos, f, prec));
    this->ui->lineEdit_3->setText(QString::number(load.lat.segundos, f, prec));

    this->ui->lineEdit_4->setText(QString::number(load.lon.grados, f, prec));
    this->ui->lineEdit_5->setText(QString::number(load.lon.minutos, f, prec));
    this->ui->lineEdit_6->setText(QString::number(load.lon.segundos, f, prec));

}

void destino::agregar_ciudad()
{
    struct ciudad tmp;
    rellenar(&tmp.lat, &tmp.lon);
    QInputDialog preg;
    preg.setLabelText("Ingrese el nombre de la ciudad");
    preg.exec();
    char *nomb;
    QString resultado;
    resultado = preg.textValue();
    for(int i=0; i<=50; i++)
    {
        tmp.nombre[i] = resultado.data()[i].toAscii();
    }
    FILE *fichero;
    fichero = fopen("ciudades.dat", "a+");
    fwrite(&tmp, sizeof(struct ciudad), 1, fichero);
    //Agrego el item a la lista
    this->ui->listWidget->addItem(new QListWidgetItem(resultado));

    fclose(fichero);

}

void destino::elimina_ciudad()
{
    FILE *fichero, *fich_nuevo;
    struct ciudad aux;
    char eliminar[50];
    QString tmp;
    tmp = this->ui->listWidget->currentItem()->text();
    if(this->ui->listWidget->count()==1)
    {
        this->ui->listWidget->clear();
        fcloseall();
        fichero = fopen("ciudades.dat", "w");
        fclose(fichero);
    }
    else
    {

    for(int i=0; i<=50; i++)
    {
        eliminar[i] = tmp.data()[i].toAscii();
    }
    fichero = fopen("ciudades.dat", "r");
    fich_nuevo = fopen("tmp.dat", "w+");
    while(!feof(fichero))
    {
        fread(&aux, sizeof(struct ciudad), 1, fichero);
        if(strcmp(aux.nombre, eliminar)){
        fwrite(&aux, sizeof(struct ciudad), 1, fich_nuevo);}
    }
    fclose(fichero);
    rewind(fich_nuevo);
    fopen("ciudades.dat", "w");
    while(!feof(fich_nuevo))
    {
        fread(&aux, sizeof(struct ciudad), 1, fich_nuevo);
        fwrite(&aux, sizeof(struct ciudad), 1, fichero);
    }
    QListWidgetItem *item = this->ui->listWidget->currentItem();
    delete item;
    fcloseall();
    }
}

void destino::on_buttonBox_accepted()
{
    this->rellenar(&this->lat1, &this->long1);
    if(this->ui->comboBox->currentText()=="Sur")
    {
        pasar_cuadrante_negativo(&lat1);
    }
    if(this->ui->comboBox_2->currentText()=="Oeste")
    {
        pasar_cuadrante_negativo(&long1);
    }

}

void pasar_cuadrante_negativo(struct terna *coorde)
{
    coorde->grados *= -1;
    coorde->minutos *= -1;
    coorde->segundos *= -1;
}

void destino::set_title()
{
    this->setWindowTitle(this->titulo);
    this->ui->label_10->setText(this->lab1);
}

void destino::rellenar(struct terna *latitud, struct terna *longitud)
{
    latitud->grados = this->ui->lineEdit->text().toFloat();
    latitud->minutos = this->ui->lineEdit_2->text().toFloat();
    latitud->segundos = this->ui->lineEdit_3->text().toFloat();

    longitud->grados = this->ui->lineEdit_4->text().toFloat();
    longitud->minutos = this->ui->lineEdit_5->text().toFloat();
    longitud->segundos = this->ui->lineEdit_6->text().toFloat();
}

void destino::llenar_lista()
{
    FILE *fichero;
    fichero = fopen("ciudades.dat", "r");
    QListWidgetItem *item;
    if(fichero)
    {
        struct ciudad leido;
        while(!feof(fichero))
        {
            fread(&leido, sizeof(struct ciudad), 1, fichero);
            item = new QListWidgetItem(QString::fromAscii(leido.nombre));
            this->ui->listWidget->addItem(item);
        }
        fclose(fichero);
        delete item;
    }

}
